/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package beans;

import bc.CambioFacadeLocal;
import bc.PrendaFacadeLocal;
import bc.VentaFacadeLocal;
import be.Cambio;
import be.DetalleCambioPrenda;
import be.DetalleCambioPrendaPK;
import be.DetalleVentaPrenda;
import be.Prenda;
import be.Venta;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import org.primefaces.event.SelectEvent;

/**
 *
 **Copyright  2011 Yury Daniel Zavaleta De la Cruz  Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at* http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and  limitations under the License.
 */


@ManagedBean
@SessionScoped
public class ManagedBeanCambio implements Serializable {
    @EJB
    private PrendaFacadeLocal prendaFacade;
    @EJB
    private CambioFacadeLocal cambioFacade;
     @EJB
    private VentaFacadeLocal ventaFacade;
 private Cambio cambio;
private List <Cambio> lista;
 private List<Venta> listav ;
private Venta venta;
private Prenda prenda1;
private Prenda prenda2;
private List<Prenda> lista1;
private List<Prenda> lista2;
private List<DetalleVentaPrenda> detalle_ventas;
private DetalleCambioPrenda detalle_cambio_prenda;
private List<DetalleCambioPrenda> lista_detalle_cambio_prendas;
private List<SelectItem> prendasItems = new LinkedList<SelectItem>();
private HashMap<Integer, Prenda> myprendas = new HashMap<Integer,Prenda>();


      private Date Fecha_venta;
    private Date Fecha_reporte_final;
    private int codigo_venta;
    public ManagedBeanCambio() {
        cambio= new Cambio();
        lista= new LinkedList<Cambio>();
        venta = new Venta();
        prenda1 = new Prenda();
        prenda2 = new Prenda();
         Fecha_venta = new Date();
        Fecha_reporte_final = new Date();
        detalle_ventas = new LinkedList<DetalleVentaPrenda>();
        detalle_cambio_prenda = new DetalleCambioPrenda();
        lista_detalle_cambio_prendas = new LinkedList<DetalleCambioPrenda>();

        lista1 = new LinkedList<Prenda>();
lista2 = new LinkedList<Prenda>();
    }

   

    public List<DetalleCambioPrenda> getLista_detalle_cambio_prendas() {

        return lista_detalle_cambio_prendas;
       
    }

    public void setLista_detalle_cambio_prendas(List<DetalleCambioPrenda> lista_detalle_cambio_prendas) {
        this.lista_detalle_cambio_prendas = lista_detalle_cambio_prendas;
    }


    public List<DetalleVentaPrenda> getLista_prenda_venta(){
        try {
            if(detalle_ventas== null || detalle_ventas.isEmpty())
            {
            detalle_ventas = venta.getDetalleVentaPrendaList();
            }
        } catch (Exception e) {
        }
    return detalle_ventas;
    }

     

    public Date getFecha_reporte_final() {
        return Fecha_reporte_final;
    }

    public void setFecha_reporte_final(Date Fecha_reporte_final) {
        this.Fecha_reporte_final = Fecha_reporte_final;
    }

    public Date getFecha_venta() {
        return Fecha_venta;
    }

    public int getCodigo_venta() {
        return codigo_venta;
    }

    public void setCodigo_venta(int codigo_venta) {
        this.codigo_venta = codigo_venta;
    }

    public List<Prenda> getLista1() {
        return lista1;
    }


     public List<Prenda> getListaVendidas() {
        return lista1;
    }
    public void setLista1(List<Prenda> lista1) {
        this.lista1 = lista1;
    }

    public List<Prenda> getLista2() {
        return lista2;
    }

    public void setLista2(List<Prenda> lista2) {
        this.lista2 = lista2;
    }



    public void setFecha_venta(Date Fecha_venta) {
        this.Fecha_venta = Fecha_venta;
    }

    public Prenda getPrenda1() {
        return prenda1;
    }

    public void setPrenda1(Prenda prenda1) {
        this.prenda1 = prenda1;
    }

    public Prenda getPrenda2() {
        return prenda2;
    }

    public void setPrenda2(Prenda prenda2) {
        this.prenda2 = prenda2;
    }

  


public String Nuevo(){
cambio = new Cambio();
return "index";
}

public String Nuevo_cambio(){
return "realizar_cambios";
}


public List<Prenda> completar_filtrado_prenda(String nombre) {
 LinkedList<Prenda> lista_prendas = new LinkedList<Prenda>();
            for(Prenda p : prendaFacade.findAll()){
                 myprendas.put(p.getIdPrenda(), p);
    if (p.getNombrePrenda().toUpperCase().indexOf(nombre.toUpperCase())!=-1){
    lista_prendas.add(p);

    }
    }
       return lista_prendas;
    }


    public void handleSelect(SelectEvent event) {
      FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Selected:" + event.getObject().toString(), null);
    FacesContext.getCurrentInstance().addMessage(null, message);
}
  public void Filtrar_lista_busqueda(){
         listav= new LinkedList<Venta>();
     
        for (Venta v : ventaFacade.findAll()){
            if(  v.getFechaVenta().equals(Fecha_venta) || v.getFechaVenta().equals(Fecha_reporte_final)   ||  (v.getFechaVenta().after(Fecha_venta) & v.getFechaVenta().before(Fecha_reporte_final)) ){
            listav.add(v);
                        }
        }
    }


    public List<Venta> getListaVentas() {
 
    if(listav==null){
     //listav = ventaFacade.findAll();
     listav = new LinkedList<Venta>();
    }
          return listav;
   // return ventaFacade.findAll();

    }


     public void Buscar_venta() {
    Venta venta_encontrada = new Venta();
    venta = new Venta();
   for(Venta v : ventaFacade.findAll()){
   if(v.getIdVenta()==codigo_venta){
   venta_encontrada=v;
   }
   }
   venta=venta_encontrada;
    }


    public String realizar_cambio()
    {
        cambio.setFechaCambio(new Date());
        cambio.setVenta(venta);
        lista_detalle_cambio_prendas.clear();
      //  cambioFacade.create(cambio);
    return "realizando_cambio";
    }

     public String realizar_cambio2()
    {
      lista_detalle_cambio_prendas.clear();
       cambio = new Cambio();
       cambio.setVenta(venta);
     //  cambio.setMotivoCambio("Cambio");
   return "realizando_cambio";
    }
    public Cambio getCambio() {
        return cambio;
    }
 public String Volver_Venta(){
     venta = new Venta();
     return "index?faces-redirect=true";
     }
    public void setCambio(Cambio cambio) {
        this.cambio = cambio;
    }

    public List<Cambio> getLista() {
        return lista;
    }

    public void setLista(List<Cambio> lista) {
        this.lista = lista;
    }

    public Venta getVenta() {
        return venta;
    }

    public void setVenta(Venta venta) {
        this.venta = venta;
    }
    
    public HashMap<Integer, Prenda> getMyprendas() {
        return myprendas;
    }

    public void setMyprendas(HashMap<Integer, Prenda> myprendas) {
        this.myprendas = myprendas;
    }

    public List<SelectItem> getPrendasItems() {
      List <DetalleVentaPrenda>   lista_prendas = new ArrayList<DetalleVentaPrenda>();
        prendasItems = new LinkedList<SelectItem>();
      
        try {
            if(venta != null && venta.getDetalleVentaPrendaList()!=null){
             lista_prendas =venta.getDetalleVentaPrendaList();
                       for(DetalleVentaPrenda p: lista_prendas){
        myprendas.put(p.getPrenda().getIdPrenda(), p.getPrenda());
        prendasItems.add(new SelectItem(p.getPrenda(), p.getPrenda().getNombrePrenda()));
      
        }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
       


        return prendasItems;

    }

    public void setPrendasItems(List<SelectItem> prendasItems) {
        this.prendasItems = prendasItems;
    }

 public Prenda getPrenda(Integer id) {
    return (Prenda) myprendas.get(id);
     }

    public DetalleCambioPrenda getDetalle_cambio_prenda() {
        return detalle_cambio_prenda;
    }

    public void setDetalle_cambio_prenda(DetalleCambioPrenda detalle_cambio_prenda) {
        this.detalle_cambio_prenda = detalle_cambio_prenda;
    }









 public void AgregarDetalleCambioPrenda(){
     if(cambio.getIdCambio()==null){
      cambio.setFechaCambio(new Date());
      cambioFacade.create(cambio);
     }
    
     DetalleCambioPrenda det = new DetalleCambioPrenda();
     det= detalle_cambio_prenda;
     det.setCambio(cambio);
    det.setDetalleCambioPrendaPK(new DetalleCambioPrendaPK(cambio.getIdCambio(), detalle_cambio_prenda.getPrenda().getIdPrenda(), detalle_cambio_prenda.getPrenda1().getIdPrenda()));
     lista_detalle_cambio_prendas.add(det);
   detalle_cambio_prenda = new DetalleCambioPrenda();
  

 }

 public List<DetalleCambioPrenda> getListaCambios(){
     
 return lista_detalle_cambio_prendas;
 }


 public String Terminar_cambio(){
       cambio.setDetalleCambioPrendaList(new LinkedList<DetalleCambioPrenda>());
  cambio.setDetalleCambioPrendaList(lista_detalle_cambio_prendas);
 cambioFacade.edit(cambio);
return "ventas?faces-redirect=true";
}

}
